import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Date;

public class MyTest extends JFrame implements ActionListener {
    //定义俩个面板
    private  JPanel north,center;
    //文本框 用于显示计算结果
    private  JTextField field;
    //定义按钮
    private  JButton[] btns;
    //按钮文字数组
    private String[] str;
    //计算引擎
    private ScriptEngine engine;

    //构造函数
    public  MyTest(){
        //设置窗口标题
        setTitle("客游侠的计算器");
        //设置窗口大小 宽 高
        setSize(700,700);
        //关闭窗口是结束程序
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //设置窗口位置
        setLocation((int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth() -this.getWidth())/2,(int) (Toolkit.getDefaultToolkit().getScreenSize().getHeight() -this.getHeight())/2);
        //初始化窗口
        initComponent();
        //设置窗口可见
        setVisible(true);

    }
    //初始化窗口方法
    //无参无返回值
    private void  initComponent() {
        //获取JavaScript引擎
        ScriptEngineManager manager = new ScriptEngineManager();
        engine=manager.getEngineByName("JavaScript");
        //窗口中添加内容
        //创建面板
        north = new JPanel();
        center = new JPanel();
        //创建文本框
        field = new JTextField();
        //设置文本框属性
        //field.setColumns();
        //设置宽高属性
        field.setPreferredSize(new Dimension(690, 150));
        //输入框禁止编辑
        field.setEditable(false);
        //设置一个字体格式
        Font font=new Font("SansSerif",Font.BOLD,25);
        //设置字体、加粗、大小
        field.setFont(new Font("SansSerif", Font.BOLD, 25));
        //以数组形式声明的按钮字符
        str = new String[]{
                "C", "T", "B", "÷",
                "7", "8", "9", "×",
                "4", "5", "6", "-",
                "1", "2", "3", "+",
                "S", "0", ".", "=",
        };
        //创建按钮
        btns = new JButton[str.length];
        for (int i = 0; i < btns.length; i++) {
            btns[i] = new JButton(str[i]);
            btns[i].setFont(new Font("SansSerif", Font.BOLD, 25));
        };
        //给按键添加事件监听
        for (int i=0;i<btns.length;i++){
            btns[i].addActionListener(this);

        }


            //设置布局
            north.setLayout(new FlowLayout());
            //按钮面板的布局
            center.setLayout(new GridLayout(5, 4));
            //将文本框添加到上面的面板
            north.add(field);
            //将btn添加到cebter面板
            for(int i=0;i<btns.length;i++){
                center.add(btns[i]);
            }
            //将面板添加到窗口中
            this.add(north,BorderLayout.NORTH);
            this.add(center);

    }
    private static final String TIME_PATTERN="\\d{2}:\\d{2}:\\d{2}";
    //将按键上的文字显示到输入框
    public  void showBtnText(String text) {
        System.out.println(text);
        //判断text是不是数字
        //用正则表达式检测text是不是单个数字
        Boolean isNum = text.matches("\\d");
//        if(isNum) {
//            //如果是数字，就拼接到字符串上
//            // 输入框上已有的文字
//            String oldText = field.getText();
//            field.setText(oldText+text);
//        }else {
        //如果不是数字就特殊处理
        // 如果是运行符怎么办
        //System.out.println(text);
        if ("C".equals(text)) {
            System.out.println("C");
            //清除输入框
            field.setText("");
        } else if ("B".equals(text)) {
            //删除最后一位
            //当前文本框的内容
            if (field.getText().length() > 0) {
                //先获取输入框的内容，再截取掉最后一位，将截取后的内容重新设置到输入框
                field.setText(field.getText().substring(0, field.getText().length() - 1));
            }

        } else if ("T".equals(text)) {
            //显示时间
            SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
            String currentTime = sdf.format(new Date());
            field.setText(currentTime);

        } else if ("S".equals(text)) {
            String currentTime = field.getText();
            if(currentTime.matches(TIME_PATTERN)) {
                field.setText("");
            }
            //关闭时间
        } else if ("=".equals(text)) {
            System.out.println("=");
            try {
                //获得要计算的内容
                String txt = field.getText();
                System.out.println(txt);
                txt = txt.replace("×", "*").replace("÷", "/");
                //使用计算引擎计算结果
                Object o = engine.eval(txt);
                // 计算输入框的内容
                field.setText(o+"");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

            //如果是运算符先要保留已输入的数字
            //String oldNum = field.getText();
           // System.out.println(oldNum);
            //清空输入区
           // field.setText(text);
            else{
            String oldText = field.getText();
            field.setText(oldText + text);

        }



    }
    //重写方法
    @Override
    public void actionPerformed(ActionEvent e) {
        //输出捕获的Action
        //System.out.println(e.getSource());
        Object source=e.getSource();
        if(source instanceof JButton) {
            JButton btn = (JButton) source;
            String text=btn.getText();
            //System.out.println(text);
            //展示文字到输入框
            this.showBtnText(text);
        }

    }
    public static void main(String[] args) {
        //System.out.println("Hello World");
        //创建一个实例
        new MyTest();
    }

}
